﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using DAL;
using BLL;
using BOL;
using DevComponents.DotNetBar;
using DevComponents.AdvTree;


namespace QuanLyHangXeKhach
{
    public partial class frmCapNhatXe : UserControl
    {
        CapNhatXe cnxe = new CapNhatXe();
        DieuKhien dk = new DieuKhien();
        public frmCapNhatXe()
        {
            InitializeComponent();
        }

        private void txtbienso_Validated(object sender, EventArgs e)
        {
            if (!txtbienso.Text.Contains("-"))
            {
                this.txtbienso.Validated += new System.EventHandler(this.txtbienso_Validated);
                try
                {

                    string str1 = txtbienso.Text.Substring(0, 2);
                    string str2 = txtbienso.Text.Substring(2, 1);
                    string str3 = txtbienso.Text.Substring(3);
                    try
                    {
                        int a = int.Parse(str1);
                        int b = int.Parse(str3);
                        str2 = str2.ToUpper();
                        if (str3.Length == 5)
                        {
                            str3 = str3.Substring(0, 3) + "." + str3.Substring(3);
                            txtbienso.Text = str1 + str2 + "-" + str3;
                        }
                        else
                            if (str3.Length == 4)
                            {
                                txtbienso.Text = str1 + str2 + "-" + str3;
                            }
                            else MessageBoxEx.Show("Biển số sai định dạng", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    }
                    catch (Exception)
                    {
                        MessageBoxEx.Show("Biển số sai định dạng", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    }
                }
                catch (Exception) { }

            }
        }

        private void frmCapNhatXe_Load(object sender, EventArgs e)
        {
            txttiemkiem.WatermarkText = "Tìm theo tên xe hoặc biển số";
            Loadfrm();
        }

        private void Loadfrm()
        {
            List<xe> xe = cnxe.laydsxe();
            advTree1.Nodes.Clear();
            foreach (var row in xe)
            {
                advTree1.Nodes.Add(CreatenoidenRow(row.maxe, row.tenxe, row.bienxe,row.sochongoi.ToString()));
            }
        }

        private Node CreatenoidenRow(string ma, string ten, string bien, string sochongoi)
        {
            Node node = new Node(ma);
            node.Cells.Add(new Cell(ten));
            node.Cells.Add(new Cell(bien));
            node.Cells.Add(new Cell(sochongoi));
            return node;
        }


        #region Điều khiển đóng/mở form
        private DieuKhien _Commands;
        /// <summary>
        /// Gets or sets the commands associated with the control.
        /// </summary>
        public DieuKhien Commands
        {
            get { return _Commands; }
            set
            {
                if (value != _Commands)
                {
                    DieuKhien oldValue = _Commands;
                    _Commands = value;
                    OnCommandsChanged(oldValue, value);
                }
            }
        }
        /// <summary>
        /// Called when Commands property has changed.
        /// </summary>
        /// <param name="oldValue">Old property value</param>
        /// <param name="newValue">New property value</param>
        protected virtual void OnCommandsChanged(DieuKhien oldValue, DieuKhien newValue)
        {
            if (newValue != null)
            {
                btndong.Command = newValue.dongfrmcnxe;

            }
            else
            {
                btndong.Command = null;

            }
        }

        #endregion

        private void advTree1_AfterNodeSelect(object sender, AdvTreeNodeEventArgs e)
        {
            try
            {
                Node node = e.Node;
                txtmaxe.Text = node.Cells[0].Text;
               txttenxe.Text = node.Cells[1].Text;
               txtsochongoi.Text = node.Cells[3].Text;
               txtbienso.Text = node.Cells[2].Text;               
            }
            catch (Exception) { }
        }

        private void txttiemkiem_TextChanged(object sender, EventArgs e)
        {
            List<xe> xe = cnxe.laydsxe(txttiemkiem.Text);
            advTree1.Nodes.Clear();
            foreach (var row in xe)
            {
                advTree1.Nodes.Add(CreatenoidenRow(row.maxe, row.tenxe, row.bienxe, row.sochongoi.ToString()));
            }
        }

        private void txtbienso_TextChanged(object sender, EventArgs e)
        {
            
        }

        public void xoatrang()
        {
            txttenxe.Text = "";
            txtbienso.Text = "";
            txtsochongoi.Text = "";
        }

        private void btnthem_Click(object sender, EventArgs e)
        {
            btnsua.Text = "Lưu";
            btnxoa.Text = "Hủy bỏ";
            btnthem.Enabled = false;
            txtmaxe.Text = dk.NextID(cnxe.maxelonnhat().ToString(), "XE");
            xoatrang();
            this.advTree1.AfterNodeSelect -= new DevComponents.AdvTree.AdvTreeNodeEventHandler(this.advTree1_AfterNodeSelect);
        }

        private void btnsua_Click(object sender, EventArgs e)
        {
            if (txttenxe.Text == "" || txtbienso.Text == "" || txtsochongoi.Text == "")
                MessageBoxEx.Show("Nhập đủ thông tin trước khi tiếp tục", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Error);
            else
            {
                if (btnsua.Text == "Lưu")
                {
                    cnxe.themxe(txtmaxe.Text, txttenxe.Text, txtbienso.Text, int.Parse(txtsochongoi.Text));
                    MessageBoxEx.Show("Lưu thành công", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    txtmaxe.Text = dk.NextID(cnxe.maxelonnhat().ToString(), "XE");
                    xoatrang();
                    Loadfrm();
                }
                else
                {
                    cnxe.suaxe(txtmaxe.Text, txttenxe.Text, txtbienso.Text, int.Parse(txtsochongoi.Text));
                    MessageBoxEx.Show("Sửa thành công", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    Loadfrm();
                }
            }
        }

        private void btnxoa_Click(object sender, EventArgs e)
        {
            if (btnxoa.Text == "Hủy bỏ")
            {
                btnthem.Enabled = true;
                btnsua.Text = "Sửa";
                btnxoa.Text = "Xóa";
                txtmaxe.Text = "";
                xoatrang();
                this.advTree1.AfterNodeSelect += new DevComponents.AdvTree.AdvTreeNodeEventHandler(this.advTree1_AfterNodeSelect);
            }
            else
            {
                if (txtmaxe.Text == "")
                    MessageBoxEx.Show("Chọn một đối tượng để xóa", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Error);
                else
                {
                    DialogResult dr = MessageBoxEx.Show("Bạn muốn xóa xe " + txtbienso.Text + " này ?", "Thông báo", MessageBoxButtons.YesNo, MessageBoxIcon.Error);
                    if (dr == DialogResult.Yes)
                    {
                        cnxe.xoaxe(txtmaxe.Text);
                        txtmaxe.Text = "";
                        xoatrang();
                        MessageBoxEx.Show("Xóa thành công", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information);
                        Loadfrm();
                    }
                }
            }
        }

        private void txtsochongoi_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (!Char.IsDigit(e.KeyChar) && !Char.IsControl(e.KeyChar))
            {
                e.Handled = true;
            }
        }

    }
}
